/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package spaceinvaders.personagens;

import java.awt.Graphics2D;
import java.awt.Point;
import spaceinvaders.sistema.Sistema;

/**
 * Classe responsavel pela criacao dos personagens no jogo. A idéia dessa classe
 * é ter os mecanismos basicos para que outras classes herdem dela e possamos
 * aplicar polimorfismo.
 * @author Danilo Augusto Silva
 */
public abstract class Personagem {

    protected Point posicao; //todos os herdeiros terao posicao
    protected Sistema sistema; //todos os herdeiros utilizarao do sistema

    /**
     * Construtor basico da classe Personagem, inicia posicao e sistema.
     * @param sistema = objeto responsavel pelo sistema principal do jogo.
     */

    public Personagem(Sistema sistema) {
        this.sistema = sistema;
        this.posicao = new Point(0, 0);
    }

    /**
     * Método abstrato para desenhar os personagens. Implementado em quem herdar
     * de Personagem.
     * @param g2 = elemento do tipo Graphics2D, destinado a desenhar.
     */

    public abstract void desenha(Graphics2D g2);

    /**
     * metodo para pegar posicao do personagem
     * @return posicao.
     */

    public Point getPosicao() {
        return posicao;
    }

    /**
     * metodo para modificar a posicao do personagem
     * @param posicao = posicao nova.
     */

    public void setPosicao(Point posicao) {
        this.posicao = posicao;
    }

    /**
     * metodo para modificar a posicao dos tiros (que irao herdar de personagem)
     * @param posicao = posicao aonde o tiro nasce
     */

    public void setPosicaoShoot(Point posicao) { }

    /**
     * metodo para retorno da pontuacao ao matar um invasor.
     * @return pontuacao dependendo do invasor.
     */

    public abstract int score();

    /**
     * metodo para modificar a posicao da explosao.
     * @param point = local aonde a explosao nasce (local aonde o invasor morre).
     */

    public void setPosicaoExplosion(Point point) { }

}
